from rank_bm25 import BM25Okapi
import jieba

def bm25_match(input_str, corpus):
    # 1. 中文分词处理（中文分词）
    tokenized_corpus = [list(jieba.cut(name)) for name in corpus]  # 语料库分词
    tokenized_input = list(jieba.cut(input_str))  # 输入值分词
    
    # 2. 构建BM25模型
    bm25 = BM25Okapi(tokenized_corpus)
    
    # 3. 计算输入与每个语料的相似度分数
    scores = bm25.get_scores(tokenized_input)
    
    # 4. 找到分数最高的匹配结果
    max_score_idx = scores.argmax()
    return corpus[max_score_idx], scores[max_score_idx]

# 测试：语料库为图谱中的产品名称
corpus = [
    "空间滤波器透镜L1(Z)",
    "打靶透镜",
    "靶场传输反射镜TM4-5基板"
]

# 测试三个输入值
inputs = ["空间滤波透镜 L1", "TM4-5", "打靶透镜"]
for input_str in inputs:
    match_name, score = bm25_match(input_str, corpus)
    print(f"输入: {input_str} → 匹配结果: {match_name}，分数: {score:.2f}")